# -*- coding: utf-8 -*-
from  django.contrib.auth.decorators import permission_required
from django.db import models
from django.forms import ModelForm
from django.contrib.auth.models import User
from django import forms
from django.http import HttpResponseRedirect, HttpResponse
from django.core.urlresolvers import reverse
from django.template import RequestContext
from django.contrib.auth.decorators import login_required
from django.shortcuts import render_to_response, get_object_or_404, get_list_or_404, redirect
from django.core.mail import send_mail, BadHeaderError
from django.contrib.auth.forms import *
from django.db.models.query_utils import Q
from django.contrib.auth import login as auth_login
from django.contrib.auth import logout as auth_logout
from django.contrib.auth import authenticate
from si_4k.sistema.models import *
from si_4k.sistema.forms import *
from datetime import *
from si_4k.xlwt import *

from django.contrib import messages

@login_required
def index(request):
    #Aniversários do mês
    data = datetime.now()
    mes = data.month
    if mes == 12:
        prox_mes = 1
    else:
        prox_mes = mes + 1
    aniversariantes_funcionarios_mes = DetalheUsuario.objects.filter(data_nascimento__month = mes)
    aniversariantes_alunos_mes = Aluno.objects.filter(data_nascimento__month = mes)
    aniversariantes_funcionarios_prox_mes = DetalheUsuario.objects.filter(data_nascimento__month = prox_mes)
    aniversariantes_alunos_prox_mes = Aluno.objects.filter(data_nascimento__month = prox_mes)
    #Fim Aniversários do mês    

    #Bloco de notas
    if request.user.is_authenticated():
        usuario_conect = request.user
        usuario = usuario_conect.get_profile()
    erro = False
    success = False
    if request.method == 'GET':
        usuario_form = DetalheUsuarioForm(instance = usuario)
      
    else:
        usuario_form = DetalheUsuarioForm(request.POST, instance = usuario)
        if usuario_form.is_valid():
            usuario = usuario_form.save()
            success = True
        else:
            erro = True 
    #Fim Bloco de notas
    
    #Relatorio de aulas
    lista_aulas_relatorio = RelatorioAula.objects.filter(valido=False)
    
    #Aulas do dia
    hoje = date.today()
    data_min = datetime( hoje.year, hoje.month, hoje.day, 00, 00 )
    data_max = datetime( hoje.year, hoje.month, hoje.day, 23, 59 )
    lista_aulas = Aula.objects.filter(inicio__gte = data_min).filter(inicio__lte = data_max).filter(valido=True)
    hoje2 = data.today()
    #Fim Aulas do dia
    
    
    lista_unidades = Unidade.objects.all()
    
    return render_to_response('index.html', locals(), context_instance=RequestContext(request))

@permission_required('sistema.perm_controle_entradas_saidas')
def verificacao_relatorio_aula(request, id_aula):
    aula = Aula.objects.get(id=id_aula)
    if request.method == 'GET':
        lista_relatorio_form = []
        for aluno in aula.aluno.all():
            relatorio = RelatorioAluno.objects.get(aluno=aluno)
            lista_relatorio_form.append(RelatorioAlunoForm(instance=relatorio, prefix=str(relatorio.id)))
        relatorio_aula = RelatorioAula.objects.get(aula=aula)
        relatorio_aula_form = VerificacaoRelatorioAulaForm(instance=relatorio_aula)
        
        return render_to_response('verificacao_relatorio_aula.html', locals(), context_instance=RequestContext(request))
    else:
        lista_relatorio_form = []
        for aluno in aula.aluno.all():
            relatorio = RelatorioAluno.objects.get(aluno=aluno)
            relatorio_aluno = RelatorioAlunoForm(request.POST, instance=relatorio, prefix=str(relatorio.id))
            if relatorio_aluno.is_valid():
                relatorio_aluno.save()
        relatorio_aula = RelatorioAula.objects.get(aula=aula)
        relatorio_aula_form = VerificacaoRelatorioAulaForm(request.POST, instance=relatorio_aula)
        if relatorio_aula_form.is_valid():
            relatorio_aula_form.save()
            messages.success(request, 'Dados salvos com sucesso!' )
        return HttpResponseRedirect("/index/")

@login_required
def relatorio_unificado(request, id_aluno):
    aluno = Aluno.objects.get(id=id_aluno)
    relatorio_aluno = RelatorioAluno.objects.get(aluno=aluno)
    if request.method == 'GET':
        relatorio_aluno_form = RelatorioAlunoForm(instance=relatorio_aluno)
    else:
        relatorio_aluno_form = RelatorioAlunoForm(request.POST,instance=relatorio_aluno)
        if relatorio_aluno_form.is_valid():
            relatorio = relatorio_aluno_form.save()
    return render_to_response('relatorio_unificado.html', locals(), context_instance=RequestContext(request))

@permission_required('sistema.perm_cadastro_funcionario')
def precos_unidade(request):
    lista_unidades = Unidade.objects.all()
    return render_to_response('precos_unidade.html', locals(), context_instance=RequestContext(request))

@permission_required('sistema.perm_cadastro_funcionario')    
def precos(request):
    try:
        nome_unidade = request.GET['unidade']
        unidade = Unidade.objects.get(nome=nome_unidade)
        precos = PrecoAula.objects.get(unidade=unidade)
        precoaula_form = PrecoAulaForm(instance = precos)
    except:
        pass
    return render_to_response('precos.html', locals(), context_instance=RequestContext(request))
        
@permission_required('sistema.perm_cadastro_funcionario')
def salvar_precos(request, id_preco):
    precos = PrecoAula.objects.get(id=id_preco)
    precoaula_form = PrecoAulaForm(request.POST, instance = precos)
    if precoaula_form.is_valid():
        precos = precoaula_form.save()
        messages.success(request, 'Modificações foram feitas com sucesso!')
    else:
        messages.error(request, 'Preencha o formulário corretamente')
    return HttpResponseRedirect("/precos_unidade/")


#professor
@login_required
def prof_index(request):
    data = datetime.now()
    hoje2 = data.today()
    
    #Bloco de notas
    if request.user.is_authenticated():
        usuario_conect = request.user
        usuario = usuario_conect.get_profile()
    erro = False
    success = False
    if request.method == 'GET':
        usuario_form = DetalheUsuarioForm(instance = usuario)
      
    else:
        usuario_form = DetalheUsuarioForm(request.POST, instance = usuario)
        if usuario_form.is_valid():
            usuario = usuario_form.save()
            success = True
        else:
            erro = True 
    #Fim Bloco de notas

    #Aulas do dia
    hoje = date.today()
    data_min = datetime( hoje.year, hoje.month, hoje.day, 00, 00 )
    data_max = datetime( hoje.year, hoje.month, hoje.day, 23, 59 )
    lista_aulas = Aula.objects.filter(inicio__gte = data_min).filter(inicio__lte = data_max).filter(valido=True)
    hoje2 = data.today()
    #Fim Aulas do dia
    
    
    
    return render_to_response('prof_index.html', locals(), context_instance=RequestContext(request))

@login_required    
def prof_relat(request):
    usuario_prof = request.user
    detalhe_prof = usuario.get_profile()
    professor = Professor.objects.get(detalheusuario = detalhe_prof)
    return render_to_response('prof_relat.html', locals(), context_instance=RequestContext(request))
    
@login_required    
def prof_relat_view(request):
    usuario_prof = request.user
    detalhe_prof = usuario.get_profile()
    professor = Professor.objects.get(detalheusuario = detalhe_prof)
    return render_to_response('prof_relat.html', locals(), context_instance=RequestContext(request))

@permission_required('sistema.perm_cadastro_relatorio_aula')        
def relatorio_aula_view(request, id_aula,id_aluno):
    aula = Aula.objects.get(id=id_aula)
    if request.method == 'GET':
        cadastro = RelatorioAulaForm()
        return render_to_response('relatorio_aula.html', locals(), context_instance=RequestContext(request))
    else:
        cadastro = RelatorioAulaForm(request.POST)
        if cadastro.is_valid():
            relatorio = cadastro.save(commit=False)
            relatorio.aula = aula
            relatorio.save()
            cadastro = RelatorioAulaForm()
            request.user.message_set.create(message="O Relatorio de aula foi salvo com sucesso!") 
            url = reverse('prof_aulasdadas')
            return HttpResponseRedirect(url)
        else:
            request.user.message_set.create(message="Preencha o Relatório corretamente") 
            return render_to_response('relatorio_aula.html', locals(), context_instance=RequestContext(request))

@login_required      
def prof_historico_aluno(request, id_aluno):
    aluno = Aluno.objects.get(id=id_aluno)
    relatorio = RelatorioAluno.objects.get(aluno=aluno)
    return render_to_response('prof_historico_aluno.html', locals(), context_instance=RequestContext(request))
    
@login_required
def prof_tarefa(request):
    return render_to_response('prof_tarefas.html', context_instance=RequestContext(request))
    
@login_required
def prof_ver_aluno(request, id_aluno):
    usuario = request.user
    return render_to_response('prof_ver_aluno.html', context_instance=RequestContext(request))  

@login_required
def prof_aulasdadas(request):
    usuario_prof = request.user
    detalhe_prof = usuario_prof.get_profile()
    professor = Professor.objects.get(detalheusuario = detalhe_prof)
    aulas = Aula.objects.filter(professor=professor)
    hoje = datetime.now()
    return render_to_response('prof_aulasdadas.html', locals(), context_instance=RequestContext(request)) 

@login_required
def prof_aulasnaodadas(request):
    usuario_prof = request.user
    detalhe_prof = usuario_prof.get_profile()
    professor = Professor.objects.get(detalheusuario = detalhe_prof)
    aulas = Aula.objects.filter(professor=professor)
    hoje = datetime.now()
    return render_to_response('prof_aulasnaodadas.html', locals(), context_instance=RequestContext(request)) 

@login_required
def prof_aluno(request, id_aula):
    usuario = request.user
    professor = usuario.get_profile()
    aula = Aula.objects.get(id=id_aula)
    alunos = Aluno.objects.filter(aula=aula)
    return render_to_response('prof_aluno.html', locals(), context_instance=RequestContext(request))
#fim professor
        
        
        
@permission_required('sistema.perm_cadastro_relatorio_aula')        
def relatorio_aula(request, id_aula):
    aula = Aula.objects.get(id=id_aula)
    if request.method == 'GET':
        cadastro = RelatorioAulaForm()
        return render_to_response('relatorio_aula.html', locals(), context_instance=RequestContext(request))
    else:
        cadastro = RelatorioAulaForm(request.POST)
        if cadastro.is_valid():
            relatorio = cadastro.save(commit=False)
            relatorio.aula = aula
            relatorio.save()
            cadastro = RelatorioAulaForm()
            request.user.message_set.create(message="O Relatorio de aula foi salvo com sucesso!") 
            url = reverse('prof_aulasdadas')
            return HttpResponseRedirect(url)
        else:
            request.user.message_set.create(message="Preencha o Relatório corretamente") 
            return render_to_response('relatorio_aula.html', locals(), context_instance=RequestContext(request))

@permission_required('sistema.perm_cadastro_relatorio_aula')        
def relatorio_aula_geral(request, id_aula, id_aluno):
    aula = Aula.objects.get(id=id_aula)
    if request.method == 'GET':
        cadastro = RelatorioAulaForm()
        return render_to_response('relatorio_aula_geral.html', locals(), context_instance=RequestContext(request))
    else:
        cadastro = RelatorioAulaForm(request.POST)
        if cadastro.is_valid():
            relatorio = cadastro.save(commit=False)
            relatorio.aula = aula
            relatorio.save()
            cadastro = RelatorioAulaForm()
            request.user.message_set.create(message="O Relatorio de aula foi salvo com sucesso!") 
            return HttpResponseRedirect('/tabela_aluno/')
        else:
            request.user.message_set.create(message="Preencha o Relatório corretamente") 
            return render_to_response('relatorio_aula_geral.html', locals(), context_instance=RequestContext(request))

def login(request):
    erro = False
    login_form = LoginForm()
    if request.method == 'GET':
        return render_to_response('login.html', locals())
    else:
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                auth_login(request, user)
                profile = user.get_profile()
                if profile.cargo == 'Professor':
                    return redirect('prof_index')
                else:
                    return redirect('index')
            else:
                erro = True
                return render_to_response('login.html', locals())
        else:
            erro = True
            return render_to_response('login.html', locals())

def logout(request):
    auth_logout(request)
    return HttpResponseRedirect("/login/")
    
@permission_required('sistema.perm_cadastro_aluno')
def sistema(request):
    
    return render_to_response('sistema.html', locals(), context_instance=RequestContext(request))